package com.spzx.payment;  // 定义类所在的包

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.spzx.common.core.web.controller.BaseController;
import com.spzx.common.core.web.domain.BaseEntity;

public class GenMP {  // 生成代码的主类

    public static void main(String[] args) {  // 程序的入口方法
        // FastAutoGenerator.create() 启动 MyBatis-Plus 的自动代码生成器
        // 传入数据库连接信息，数据库 URL、用户名、密码
        FastAutoGenerator.create("jdbc:mysql://192.168.146.131:3306/spzx-payment?characterEncoding=utf-8&useSSL=false", "root", "root")
                .globalConfig(builder -> builder  // 配置全局设置
                        .author("atguigu")  // 设置作者名称为 atguigu
                        .outputDir("D:/spzx/payment")  // 设置代码生成的输出目录为 D:/spzx/order
                        .dateType(DateType.ONLY_DATE)  // 设置日期字段类型为 ONLY_DATE（仅日期，不含时间）
//                        .disableOpenDir()  // 禁止自动打开文件夹
                )
                .packageConfig(builder -> builder  // 配置包结构
                        .parent("com.spzx.payment")  // 设置父包名为 com.spzx.order
                        .entity("domain")  // 设置实体类包名为 domain
                        .mapper("mapper")  // 设置 Mapper 接口包名为 mapper
                        .xml("mapper.payment")  // 设置 Mapper XML 文件的包名为 mapper.order
                        .service("service")  // 设置 Service 接口包名为 service
                        .serviceImpl("service.impl")  // 设置 Service 实现类包名为 service.impl
                        .controller("controller")  // 设置 Controller 包名为 controller
                )
                .strategyConfig(builder -> builder  // 配置策略设置
                        .addInclude(  // 设置需要生成的表名
                                "payment_info"
                        )
                        .entityBuilder()  // 配置实体类生成策略
                        .enableLombok()  // 启用 Lombok 注解生成 getter、setter 等方法
                        .superClass(BaseEntity.class)  // 设置实体类的父类为 BaseEntity
                        .addSuperEntityColumns(  // 为实体类添加父类的字段
                                "id",  // 父类字段 id
                                "create_by",  // 父类字段 create_by
                                "create_time",  // 父类字段 create_time
                                "update_by",  // 父类字段 update_by
                                "update_time",  // 父类字段 update_time
                                "remark",  // 父类字段 remark
                                "del_flag"  // 父类字段 del_flag
                        )
                        //.addIgnoreColumns  // 可以在这里忽略某些列不生成（此行已注释掉）
                        .enableFileOverride()  // 启用文件覆盖，防止重复生成文件时出错

                        .serviceBuilder()  // 配置 Service 层生成策略
                        //.formatServiceFileName("I%sService")  // 可以自定义 Service 接口文件名格式（此行已注释掉）
                        .enableFileOverride()  // 启用文件覆盖，防止重复生成 Service 文件时出错

                        .controllerBuilder()  // 配置 Controller 层生成策略
                        .superClass(BaseController.class)  // 设置 Controller 的父类为 BaseController
                        .enableRestStyle()  // 启用 REST 风格的 API 设计，自动使用 @RestController 和 @RequestMapping
                        .enableFileOverride()  // 启用文件覆盖，防止重复生成 Controller 文件时出错
                )
                .templateEngine(new FreemarkerTemplateEngine())  // 设置模板引擎为 FreeMarker
                .execute();  // 执行代码生成
    }
}
